package com.prueba;

import jess.JessException;
import jess.Rete;
import jess.Value;

public class MotorDJ {
	Rete engine;

    public MotorDJ() throws JessException {
        engine = new Rete();
        definirTemplates();
        cargarReglas();
        
    }

        
        
	public void definirTemplates() throws JessException {
		//Plantilla de condiciones de evento
		engine.executeCommand("(deftemplate condiciones "+
									"(slot lugar " +
										"(default local) " +
											" ) "+
									"(slot tipo-evento 	" +
										"(default cumpleanios) " +
										" ) " +
									"(slot hora " +
										"(type SYMBOL) " +
										"(default 00:00) ) "+
									"(slot personas " +
										"(type INTEGER) " +
										"(default 40) )" +
									"(slot edad-promedio " +
										"(type INTEGER) " +
										"(default 23) ) " +
                                                                        "(slot genero-mayo " +
										"(default ninguno) ) " +
								")");

	}


	public void cargarReglas() throws JessException {
		String R1 = "(defrule  R1 " +
						"( condiciones (lugar ? ) " +
						"(tipo-evento cumpleanios ) " +
						"(hora 00:00 ) " +
						"( personas ? ) " +
						"( edad-promedio ?)  " +
                                                "( genero-mayo ? ) )" +
						"=>  " +
						"(store cancion \"c:/musica/Cumpleanios Feliz.mp3\") ) ";
                
		agregarRegla(R1);
	}

	public void agregarHecho(String lugar, String tipoEvento, String hora, String cantPersonas, String edadProm, String generoMaroyitario) throws JessException {
		String lugar2 = (lugar.equals(""))?"":"( lugar "+lugar+" ) ";
		String tipoEvento2 = (tipoEvento.equals(""))?"":"( tipo-evento "+tipoEvento+" ) ";
		String hora2 = (hora.equals(""))?"":"( hora "+hora+" ) ";
		String cantPersonas2 = (cantPersonas.equals(""))?"":"( personas "+cantPersonas+" ) ";
		String edadProm2 = (edadProm.equals(""))?"":"( edad-promedio "+edadProm+" ) ";
                String genero2 = (generoMaroyitario.equals(""))?"":"( genero-mayo "+generoMaroyitario+" ) ";

		String hecho1= " ( assert ( condiciones " +
												lugar2 +
												tipoEvento2 +
												hora2 +
												cantPersonas2 +
												edadProm2 + genero2 +" ) ) ";
		          System.out.println(hecho1);
                engine.executeCommand(hecho1);

	}


	public void agregarRegla(String nuevaRegla) throws JessException {
		engine.executeCommand(nuevaRegla);
	}

	public String elegirCancion() throws JessException {
                System.out.println("Eligiendo");
		engine.executeCommand("(run)");
		Value cancion = engine.fetch("cancion");
		String elegida="";
		if(cancion != null)
			elegida = cancion.stringValue(engine.getGlobalContext());
		return elegida;
	}

	public void  mostrarHechos() throws JessException {
		engine.executeCommand("facts");
		System.out.println(engine.listFacts().next());
		System.err.println(engine.listDefrules().next());

	}

	public static void main(String[] args) throws JessException {
		MotorDJ dj = new MotorDJ();
		dj.definirTemplates();
		dj.cargarReglas();
		dj.agregarHecho("casa", "cumpleanios", "00:00", "30", "20", "M");
		dj.mostrarHechos();
		System.out.println("ver "+dj.elegirCancion());
	}

}
